import unittest
from time import sleep

from util.read_csv import CSVUtil
from ddt import ddt,data,unpack
from testcasebase.ecshop_base import MyBase
from selenium.webdriver.common.by import By

# 读取csv文件里的数据
filePath="..\\testdata\\数据_ECShop_后台添加会员.csv"
u=CSVUtil(filePath)
d=u.get_list_data()
print(d)

@ddt
class MyBgAddUserTestCase(MyBase):
    @data(*d)
    @unpack
    def test_add_user(self,dataid,caseid,username,email,password,confirm,expected):
        print("数据编号,用例编号,会员名称,邮件地址,登录密码,确认密码,预期结果编号")
        print(dataid,caseid,username,email,password,confirm,expected)
        # a.打开后台登录页
        self.driver.get("http://127.0.0.1/upload/admin/index.php")
        # 用正确账号登录进去
        self.driver.find_element(By.NAME,"username").send_keys("admin")
        self.driver.find_element(By.NAME,"password").send_keys("admin123")
        self.driver.find_element(By.NAME,"captcha").send_keys("0")
        self.driver.find_element(By.XPATH,"//input[@value='进入管理中心']").click()
        # b.如果测试有效数据(caseid=="TC001"或expected=="1")
        if caseid=="TC001":
            # 进入会员列表里
            self.driver.switch_to.frame("menu-frame")
            self.driver.find_element(By.LINK_TEXT,"会员列表").click()
            # 用该会员名称搜索
            self.driver.switch_to.default_content()
            self.driver.switch_to.frame("main-frame")
            self.driver.find_element(By.NAME,"keyword").send_keys(username)
            self.driver.find_element(By.XPATH,"//input[contains(@value,'搜索')]").click()
            sleep(3)
            # 如果有该会员名称的搜索结果（会员名称等于预期值）---难点！！
            result=self.is_element_present(By.XPATH,f"//td[text()='{username}']")
            if result:
                # 就应该删除该会员信息(点击会员名称等于预期值的那一行的最后一列里的最后一个图标“移除”)
                self.driver.find_element(By.XPATH,f"//td[text()='{username}']/../td[last()]/a[last()]/img").click()
                sleep(3)
                a=self.driver.switch_to.alert
                a.accept()
            # 切换回默认主网页
            self.driver.switch_to.default_content()
        # c.进入添加会员页面(点击“添加会员”)
        self.driver.switch_to.frame("menu-frame")
        self.driver.find_element(By.LINK_TEXT,"添加会员").click()
        # 在右侧输入各个信息，
        self.driver.switch_to.default_content()
        self.driver.switch_to.frame("main-frame")
        self.driver.find_element(By.NAME,"username").send_keys(username)#输入会员名称
        self.driver.find_element(By.NAME,"email").send_keys(email)#输入邮件地址
        self.driver.find_element(By.NAME,"password").send_keys(password)#输入登录密码
        self.driver.find_element(By.NAME,"confirm_password").send_keys(confirm)#输入确认密码
        # 点击“确定”来添加
        self.driver.find_element(By.XPATH,"//input[contains(@value,'确定')]").click()
        # d.根据“预期结果编号”的值不同来做不同的检查
        if expected=="1":
            print("第一种检查")
            # 1.跳转到系统信息页：定位元素后获得文本来检查是“系统信息”
            # print(self.driver.page_source)
            t11 = self.driver.find_element(By.ID, "search_id").text
            self.assertIn("系统信息", t11)
            # 2.系统信息页里有信息是f“会员账号 {username} 已经添加成功。”
            ps1=self.driver.page_source
            self.assertIn(f"会员账号 {username} 已经添加成功。",ps1)

        elif expected=="2":
            print("第二种检查")
            # 检查弹出提示框
            flag21=self.is_alert_present()
            self.assertTrue(flag21)
            # 切换到弹出框、获得文本、点击“确定”
            t2=self.close_alert_and_get_its_text()
            # 检查提示框里的文本是“- 没有输入用户名。”
            self.assertEqual("- 没有输入用户名。\n",t2)
            # 检查提示框消失
            flag22=self.is_alert_present()
            self.assertFalse(flag22)
        elif expected=="3":
            print("第三种检查")
            # 1.跳转到系统信息页：定位元素后获得文本来检查是“系统信息”
            # print(self.driver.page_source)
            t31=self.driver.find_element(By.ID,"search_id").text
            self.assertIn("系统信息",t31)
            # 2.系统信息页里有信息是“已经存在一个相同的用户名”
            ps3=self.driver.page_source
            self.assertIn("已经存在一个相同的用户名",ps3)
            # 3.检查3秒以后自动跳转回添加会员页
            sleep(5)
            t32=self.driver.find_element(By.ID,"search_id").text
            self.assertIn("添加会员",t32)
            # 4.添加会员页里登录密码和确认密码的文本框为空
            v31=self.driver.find_element(By.NAME,"password").get_attribute("value")
            self.assertEqual("",v31)
            v32=self.driver.find_element(By.NAME,"confirm_password").get_attribute("value")
            self.assertEqual("",v32)


if __name__ == '__main__':
    unittest.main()
